// 导入校验插件
import Schema from 'validate'

//创建校验规则
// 手机号校验规则
const mobileValidate = new Schema({
  mobile: {
    type: String, //校验类型
    required: true, //必填
    match: /^1[3-9]\d{9}$/, //正则
    message: '手机校验不合法', //提示信息
  },
})
//验证码校验规则
const codeValidate = new Schema({
  code: {
    type: String, //校验类型,
    required: true, //必填
    match: /^\d{6}$/, //正则 6位数字
    message: '验证码不合法',
  },
})
Page({
  data: {
    //倒计时是否显示
    countDownVisible: false,
    // 用户手机号双向绑定  应该后台获取验证码需要传递mobile字段,所以我们这里也要使用mobile字段进行一个双向绑定的
    mobile: '13413698888',
    // 时间对象     // 倒计时要显示的时间对象
    timeData: null,
    //验证码
    code: '',
  },
  // 在onLoad生命周期中可以获取传递的过来的参数
  // {redirect: "house_pkg/pages/list/index"}传递过来的数据我们可以通过解构获取
  onLoad({ redirect }) {
    console.log('redirect  ----->  ', redirect)
    // 挂载到页面实例上，不是应用实例,何onLoad生命周期同级,获取直接通过this.redirect获取
    this.redirect = redirect //把数据存到页面实例上,全局变量,可以方便在其他函数中使用
    // console.log('this  ----->  ', this)
  },
  countDownChange(ev) {
    // console.log('ev.detail  ----->  ', ev.detail) //{days: 0, hours: 0, minutes: 0, seconds: 41, milliseconds: 980}
    this.setData({
      timeData: ev.detail,
      // 如果分钟等于1分钟或者秒数大于0代表还在倒计时返回值为true,否则为false
      countDownVisible: ev.detail.minutes === 1 || ev.detail.seconds > 0,
    })
  },
  // 获取验证码
  async getCode() {
    //解构出data中的mobile变量
    const { mobile } = this.data

    // 发请求之前,校验手机号码
    const errors = mobileValidate.validate({ mobile })
    // console.log('errors  ----->  ', errors)
    // 数组有长度,代表有错误,提示用户
    if (errors.length) {
      // 记得return 错误的话下面请求不再发送 需要return 退出函数
      return wx.utils.toast(errors[0].message)
    }

    // 发送请求 根据手机号码获取对应的验证码(真实业务 你的手机会收到短信验证码)
    const res = await wx.http({
      url: '/code',
      data: {
        mobile,
      },
    })
    // console.log('验证码  ----->  ', res)
    // 开启倒计时
    this.setData({
      countDownVisible: true,
      // 把获取到的验证码回填到验证码输入框,提高用户体验
      code: res.data.code,
    })
  },
  //提交表单
  async onSubmit() {
    const { mobile, code } = this.data
    //校验手机号码
    const mobileErrors = mobileValidate.validate({ mobile })
    // console.log('  mobileErrors----->  ', mobileErrors)
    // 数组有长度代表有错误
    if (mobileErrors.length) {
      //调用封装的提示
      wx.utils.toast(mobileErrors[0].message)
      return //退出函数,下面代码不再执行
    }
    //校验验证码
    const codeErrors = codeValidate.validate({ code })
    // console.log('  codeErrors----->  ', codeErrors)
    // 数组有长度代表有错误
    if (codeErrors.length) {
      //调用封装的提示
      wx.utils.toast(codeErrors[0].message)
      return //退出函,下面代码不再执行
    }

    //如果能执行到这,代表校验通过,就可以收集表单数据发送登录请求了
    // console.log('校验通过,可以发请求了  ----->  ')

    const res = await wx.http({
      url: '/login',
      method: 'POST',
      data: {
        mobile,
        code,
      },
    })
    // console.log('res  ----->  ', res)

    // 处理请求失败,请求成功的状态码位10000,不是10000代表请求错误,提示用户,并且跳出函数,下面代码不再执行
    if (res.code !== 10000) {
      return wx.utils.toast(res.message)
    }

    //提示用户登录成功
    wx.utils.toast('登录成功')

    //请求成功后将token和refreshToken存到本地存储,调用在app.js里面的setToken()方法
    // 创建应用实例
    const app = getApp()
    // console.log('app  ----->  ', app)
    app.setToken(res.data.token, res.data.refreshToken)

    //跳转回来源页面
    // 获取来源页
    // this.redirect  ----->   house_pkg/pages/list/index
    console.log('this.redirect  ----->  ', this.redirect)
    // 如果有来源页,就跳转到来源页面,如果没有来源页,就跳转到主页
    // 有为true，没有就为undefined转为布尔值为false
    setTimeout(() => {
      if (this.redirect) {
        // navigateTo只能跳转到非tabBar页面
        // switchTab跳转到tabBar页面
        // reLaunch跳转到指定页面,tabBar页面和普通页面都可以,会关闭其他所有页面

        // 由于之前配置过项目基准路径为miniprogram,所以路径都直接可以冲/pages开始查找
        // 有来源页面跳转到来源页面
        // 注意来源页面前面没有/无法跳转,需要手动拼接

        // 由于来源页可能是tabBar页面或普通页面,所以我们这里要改为reLaunch跳转到所以页面
        // wx.navigateTo({ url: '/' + this.redirect })
        wx.reLaunch({ url: '/' + this.redirect })
      } else {
        //没有来源页面,跳转到首页
        // navigateTo不能跳转到tabBar页面，要
        // 想跳转到tabBar页面, 需要使用switchTab跳转到 tabBar 页面，并关闭其他所有非 tabBar 页面
        // wx.navigateTo({ url: '/pages/index/index' })
        wx.switchTab({ url: '/pages/index/index' })
      }
    }, 1000)
  },
})
